package com.bsj.power.common.http;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bsj.power.common.constant.NumericalConstants;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hikvision.artemis.sdk.constant.ContentType;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Map;

/**
 * @author LiJiaXin
 * @version 1.0.0
 * @description PersonHttp
 * @time 2024/12/23 22:58
 */
@Slf4j
@Component
@Profile({"power-module-pls", "power-module-job"}) // 设置环境名，该配置类只在pls环境使用
public class PersonHttp {

    @Value("${hiKv.host}")
    private String host;

    @Value("${hiKv.appKey}")
    private String appKey;

    @Value("${hiKv.appSecret}")
    private String appSecret;

    /**
     * url格式：https://{hostname}:{port}/artemis/{uri}。
     */
    private static final String ARTEMIS_PATH = "/artemis";

    /**
     * 根据人员身份证号获取人员id
     * 请求海康“根据人员唯一字段获取人员详细信息”API
     *
     * @param idCardNo
     * @return java.lang.String
     * @author ljx
     * @time 2024/9/25 11:43
     */
    public String getExtEventPersonNoByIdCardNo(String idCardNo) {
        ArtemisConfig.host = host;
        ArtemisConfig.appKey = appKey;
        ArtemisConfig.appSecret = appSecret;
        // 调用接口地址
        final String url = "/api/resource/v1/person/condition/personInfo";
        final String httpStr = "https://";
        Map<String, String> path = Map.of(httpStr, ARTEMIS_PATH + url);

        //根据人员唯一字段获取人员详细信息请求参数
        String[] array = {idCardNo};
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("paramName", "certificateNo");
        jsonBody.put("paramValue", array);
        String body = jsonBody.toString();
        String result = null;
        try {
            result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, ContentType.CONTENT_TYPE_JSON);
            if (StringUtils.isNotBlank(result)) {
                JSONObject jsonObject = JSONObject.parseObject(result);
                Integer code = jsonObject.getInteger("code");
                if (code != null && code.equals(NumericalConstants.ZERO)) {
                    log.info("请求根据人员唯一字段获取人员详细信息成功，请求地址：{}，请求参数{}，返回内容：{}", JSONObject.toJSONString(path), body, result);
                    JSONObject data = jsonObject.getJSONObject("data");
                    if (data == null) {
                        return null;
                    }
                    JSONArray jsonArray = data.getJSONArray("list");
                    if (CollectionUtils.isEmpty(jsonArray)) {
                        return null;
                    }
                    List<JSONObject> jsonObjects = jsonArray.toJavaList(JSONObject.class);
                    if (CollectionUtils.isEmpty(jsonObjects)) {
                        return null;
                    }
                    //人员信息
                    JSONObject personInfo = jsonObjects.get(NumericalConstants.ZERO);
                    String personId = personInfo.getString("personId");
                    return personId;
                } else {
                    log.info("请求根据人员唯一字段身份证号获取人员详细信息失败，请求地址：{}，请求参数{}，返回内容：{}", JSONObject.toJSONString(path), body, result);
                }
            } else {
                log.info("请求根据人员唯一字段身份证号获取人员详细信息失败，返回无结果，请求地址：{}，请求参数{}", JSONObject.toJSONString(path), body);
            }
        } catch (Exception e) {
            log.error("请求根据人员唯一字段身份证号获取人员详细信息错误，请求地址：{}，请求参数{}，返回内容：{}", JSONObject.toJSONString(path), body, result);
        }
        return null;
    }

}
